package component

type (
	// Transporter 表示某种特定协议的后端服务，例如Dubbo, gRPC, Http等协议的后端服务。
	// 默认实现了Dubbo(gRpc)和Http两种协议。
	Transporter interface {
		// DoInvoke 执行请求
		DoInvoke(InnerContext) (*ServerResponse, *ServerError)
		Name() string
	}
)

var (
	// transporters 保存所有已注册的 Transporter
	transporters = make(map[string]Transporter)
)

// RegisterTransporter 注册 Transporter
func RegisterTransporter(transporter Transporter) {
	transporters[transporter.Name()] = transporter
}

// GetTransporter 获取 Transporter
func GetTransporter(name string) (Transporter, bool) {
	t, ok := transporters[name]
	return t, ok
}
